package com.cy.pj.arithmetic.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//extends BaseController 处理异常 增加了耦合性
@RestController  //@Controller+@ReponseBody
public class ArithmeticController{
    /**除法运算*/
    @RequestMapping("/doCompute01/{n1}/{n2}")
    public String doCompute01(@PathVariable Integer n1, @PathVariable Integer n2){
        try {
            Integer result=n1/n2;
            return "result is"+result;
        }catch (ArithmeticException e){
            return "do compute error,cause by"+e.getMessage();
        }//try{}catch(){}代码我们在项目中通常会认为模板代码
        //将来在项目中不建议出现大量重复的模板代码
    }

    @RequestMapping("/doCompute02/{n1}/{n2}")
    public String doCompute02(@PathVariable Integer n1, @PathVariable Integer n2){
        Integer result=n1/n2;
        //如上语句出现了算数以后以后，此异常会抛给谁？调用方，调用方是谁呢？DispatcherServlet
        return "result is"+result;
    }
    /**
     * @ExceptionHandler  注解描述的方法为控制逻辑层异常处理方法，此注解内部
     * 定义的异常类型，为异常处理方法可以处理的异常类型
     * 其中，异常处理方法参数中的异常类型应该与@ExceptionHandler注解中定义的异常类型
     * 一致或者是@ExceptionHandler注解中定义的异常类型的父类类型
     * @param e 为异常处理方法捕获到的异常对象
     * @return
     */

//    @ExceptionHandler(ArithmeticException.class)
//    //@ResponseBody 当类上添加了@ResponseBody，方法上的就可以省略了
//    public String doHandleArithmeticException(ArithmeticException e){
//        return "exception msg is"+e.getMessage();
//    }//此异常处理方法，可以处理这个方法所在类的所有算术异常。
}
